

package RMI;

import java.io.File;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.logging.Level;
import java.util.logging.Logger;

public class RemoteClient 
{
    public static void main( String args[] )
    {
        String objectUrl;
        File localDirectory;
        String fileName;

        String localFilePath;

        RemoteClient myRemoteService;
        RemoteClientInterface remoteFileService;

        /*
        if (args.length != 2) {
            System.out.println("Deve passar na linha de comando:");
            System.out.println("(1) a localizacao do servico;"); //127.0.0.1 
            System.out.println("(2) o que deseja mostrar no ecran");
            System.out.println("o argumento (2)pode ser:");
            System.out.println("-> '1'  = lista de nomes ativos e as operacoes efetuadas");
            System.out.println("-> '2'  = lista de ficheiros existentes");
            System.out.println("-> '3'  = lista de IP's e portos dos repositorios ativos");
            return;
        }
*/
        
        try {
            //objectUrl = "rmi://" + args[0] + "/RemoteBox";
            //int tipo = Integer.parseInt(args[1]);  
            objectUrl = "rmi://127.0.0.1/RemoteBox";
            int tipo = 1;

            /*
            * Obtem a referencia remota para o servico com nome "GetRemoteFile"
            */
            remoteFileService = (RemoteClientInterface) Naming.lookup(objectUrl);
            
            /*
            * Lanca o servico local para acesso remoto por parte do servidor.
            */
            myRemoteService = new RemoteClient();
            
            /*
            * Passa ao servico local uma referencia para o objecto localFileOutputStream
            */
            //myRemoteService.setFout(localFileOutputStream);
            
            /*
            * Obtem o ficheiro pretendido, invocando o metodo getFile no servico remoto.
            */
            
            switch (tipo) {
                case 1:
                    String listaNome,listaOperacoes;
                    listaNome = remoteFileService.getListaNomesConectados();
                    listaOperacoes = remoteFileService.getTipoOperacaoEmCurso();
                    System.out.println("Nomes          : "+listaNome);
                    System.out.println("Ultima operacao: "+listaOperacoes);
                    break;
                case 2:
                    String listaFich;
                    listaFich = remoteFileService.getListaFicheiros();
                    System.out.println(listaFich);
                    break;
                case 3:
                    String listaIPs, listaPorts;
                    listaIPs = remoteFileService.getAddrRepositoriosAtivos();
                    listaPorts = remoteFileService.getPortoRepositoriosAtivos();
                    System.out.println(listaIPs);
                    System.out.println(listaPorts);
                    break;
                default:
            }
            
            
        
            /*
            * Retira do servico local a referencia para o objecto localFileOutputStream
            */
            //myRemoteService.
            
            /*
            * Termina o serviço local
            */
            //UnicastRemoteObject.unexportObject(myRemoteService, true);
            
        } catch (NotBoundException ex) {
            Logger.getLogger(RemoteClient.class.getName()).log(Level.SEVERE, null, ex);
        } catch (MalformedURLException ex) {
            Logger.getLogger(RemoteClient.class.getName()).log(Level.SEVERE, null, ex);
        } catch (RemoteException ex) {
            Logger.getLogger(RemoteClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
